#ifndef __EVENTFD_H__
#define __EVENTFD_H__

#include <functional>

using std::function;

class EventFd
{
    using EventFdCallback = function<void()>;

public:
    EventFd(EventFdCallback &&cb);
    ~EventFd();

    // 启动与停止
    void start();
    void stop();

    // 封装eventfd
    int createEventFd();

    // 封装read
    void handleRead();

    // 封装write
    void wakeup();

private:
    int _efd;            // eventfd创建的文件描述符
    EventFdCallback _cb; // 被唤醒后需要执行的任务
    bool _isStarted;     // 标识是否循环的标志
};

#endif
